(function($) {
    "use strict";

    $.fn.touchspin = function () {
        return this.each(function(){
            var t=$(this);
            var min= t.data("min");
            var max= t.data("max");
            var highlight= t.data("highlight");
            t.wrap('<div class="touchspin-wrap"></div>');
            var wrap= t.parent(".touchspin-wrap");
            wrap.append('<div class="touchspin-btn"><div class="up"><i class="fa fa-caret-up"></i></div><div class="down"><i class="fa fa-caret-down"></i></div></div>');
            wrap.find(".up").click(function(){
                var v=t.val();
                if(parseInt(v)){
                    v=parseInt(v);
                }else{
                    v=0;
                }
                t.val(v+1);
                t.focus();
            });
            wrap.find(".down").click(function(){
                var v=t.val();
                if(parseInt(v)){
                    v=parseInt(v);
                }else{
                    v=0;
                }
                t.val(v-1);
                t.focus();
            });
            t.after("<p class='error-info'></p>");
            var er=t.next(".error-info");
            var default_color=t.css("border-color");
            t.keydown(function(e){
                var _char=e.keyCode;
                if((_char<48||_char>57)&&_char!=8&&_char!=116&&(_char<96||_char>105)&&_char!=37&&_char!=39&&_char!=9){
                    return false;
                }
                if(_char==37||_char==39||_char==8||_char==116&&_char==9){
                    return true;
                }

            });
            t.keyup(function(e){
                var _char=e.keyCode;
                var key= parseInt(t.val());
                if(min&&key<min){
                    er.html('Must be greater than '+min);
                }
                if(max&&key>max){
                    er.html('Must be less than '+max);
                }
                if(min&&key<min||max&&key>max){
                    if(!wrap.hasClass("error-show")){
                        wrap.addClass("error-show");
                        er.animate({height:"20px"});
                        if(highlight){
                            t.css("border-color",highlight);
                        }
                    }
                }else{
                    wrap.removeClass("error-show");
                    er.animate({height:"0px"});
                    t.data("pass",true);
                    t.css("border-color",default_color);
                }
            });

        });
    }
}(jQuery));
